package com.ragdollcat.thirdaicodegenerate.util;

import com.ragdollcat.thirdaicodegenerate.enums.FileType;
import com.ragdollcat.thirdaicodegenerate.model.entity.FileNode;

import java.io.File;
import java.util.Collections;
import java.util.List;

public class FileTreeUtil {


    /**
     * 从服务器文件系统的指定根路径构建目录树
     *
     * @param rootPath 服务器上根目录的**绝对路径**（如 "/opt/apps/vue_project_340685275397222400_1"）
     * @return 根节点列表（此处仅有一个根节点）
     * @throws IllegalArgumentException 路径不存在或非目录时抛出
     */
    public static List<FileNode> buildTreeFromFileSystem(String rootPath) {
        File rootDir = new File(rootPath);
        if (!rootDir.exists()) {
            throw new IllegalArgumentException("根路径不存在：" + rootPath);
        }
        if (!rootDir.isDirectory()) {
            throw new IllegalArgumentException("根路径不是目录：" + rootPath);
        }

        FileNode rootNode = new FileNode(rootDir.getName(), FileType.DIRECTORY);
        buildNodeRecursively(rootNode, rootDir);
        return Collections.singletonList(rootNode);
    }

    /**
     * 递归遍历目录，组装子节点
     *
     * @param parentNode 父节点（目录）
     * @param parentDir  对应的父目录 File 对象
     */
    private static void buildNodeRecursively(FileNode parentNode, File parentDir) {
        File[] files = parentDir.listFiles();
        if (files == null) {
            return; // 处理空目录或无权限读取的情况
        }

        for (File file : files) {
            if (file.getName().equals("dist") || file.getName().equals("node_modules")){
                continue;
            }
            FileType type = file.isDirectory() ? FileType.DIRECTORY : FileType.FILE;
            FileNode childNode = new FileNode(file.getName(), type);
            parentNode.addChild(childNode);

            if (file.isDirectory()) {
                buildNodeRecursively(childNode, file); // 递归处理子目录
            }
        }
    }

}
